# 该脚本用于从gif动图中抽取每帧图片
import os
import sys
from PIL import Image

def extract_gif_frames(input_gif):
    # 打开GIF文件
    try:
        gif = Image.open(input_gif)
    except IOError:
        print(f"无法打开文件：{input_gif}")
        return

    # 获取GIF文件名（不包含扩展名）
    base_filename = os.path.splitext(os.path.basename(input_gif))[0]

    # 创建保存帧的目录
    output_dir = "extracted_frames"
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 遍历GIF的每一帧并保存
    frame_number = 0
    while True:
        try:
            # 转到当前帧
            gif.seek(frame_number)
            # 保存当前帧
            output_filename = f"{base_filename}_{frame_number}.png"
            output_path = os.path.join(output_dir, output_filename)
            gif.save(output_path)
            print(f"保存帧：{output_path}")
            frame_number += 1
        except EOFError:
            # 如果没有更多帧，退出循环
            break
    
    # 打印最终数量
    print(f"帧数量:{frame_number}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法:python extract_gif.py <输入GIF文件>")
        sys.exit(1)

    input_gif = sys.argv[1]
    extract_gif_frames(input_gif)
